// Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima).
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/*!
 * @file HandReplyParam.h
 * This header file contains the declaration of the described types in the IDL
 * file.
 *
 * This file was generated by the tool fastddsgen.
 */

#ifndef _FAST_DDS_GENERATED_BOOSTER_INTERFACE_MSG_HANDREPLYPARAM_H_
#define _FAST_DDS_GENERATED_BOOSTER_INTERFACE_MSG_HANDREPLYPARAM_H_

#include <array>
#include <bitset>
#include <cstdint>
#include <fastcdr/cdr/fixed_size_string.hpp>
#include <fastcdr/xcdr/external.hpp>
#include <fastcdr/xcdr/optional.hpp>
#include <map>
#include <string>
#include <vector>

// ------------------------------ Pub Sub Type Start
// ----------------------------
#include <fastdds/rtps/common/InstanceHandle.h>
#include <fastdds/rtps/common/SerializedPayload.h>
#include <fastrtps/utils/md5.h>

#include <fastdds/dds/core/policy/QosPolicies.hpp>
#include <fastdds/dds/topic/TopicDataType.hpp>

#if !defined(GEN_API_VER) || (GEN_API_VER != 2)
#error \
    Generated HandReplyParam is not compatible with current installed Fast DDS. Please, regenerate it with fastddsgen.
#endif  // GEN_API_VER

// ------------------------------ Pub Sub Type End ----------------------------

#if defined(_WIN32)
#if defined(EPROSIMA_USER_DLL_EXPORT)
#define eProsima_user_DllExport __declspec(dllexport)
#else
#define eProsima_user_DllExport
#endif  // EPROSIMA_USER_DLL_EXPORT
#else
#define eProsima_user_DllExport
#endif  // _WIN32

#if defined(_WIN32)
#if defined(EPROSIMA_USER_DLL_EXPORT)
#if defined(HANDREPLYPARAM_SOURCE)
#define HANDREPLYPARAM_DllAPI __declspec(dllexport)
#else
#define HANDREPLYPARAM_DllAPI __declspec(dllimport)
#endif  // HANDREPLYPARAM_SOURCE
#else
#define HANDREPLYPARAM_DllAPI
#endif  // EPROSIMA_USER_DLL_EXPORT
#else
#define HANDREPLYPARAM_DllAPI
#endif  // _WIN32

namespace eprosima {
namespace fastcdr {
class Cdr;
class CdrSizeCalculator;
}  // namespace fastcdr
}  // namespace eprosima

namespace booster_interface {

namespace msg {

/*!
 * @brief This class represents the structure HandReplyParam defined by the user
 * in the IDL file.
 * @ingroup HandReplyParam
 */
class HandReplyParam : public eprosima::fastdds::dds::TopicDataType {
 public:
  /*!
   * @brief Copy constructor.
   * @param x Reference to the object booster_interface::msg::HandReplyParam
   * that will be copied.
   */
  eProsima_user_DllExport HandReplyParam(const HandReplyParam& x);

  /*!
   * @brief Move constructor.
   * @param x Reference to the object booster_interface::msg::HandReplyParam
   * that will be copied.
   */
  eProsima_user_DllExport HandReplyParam(HandReplyParam&& x) noexcept;

  /*!
   * @brief Copy assignment.
   * @param x Reference to the object booster_interface::msg::HandReplyParam
   * that will be copied.
   */
  eProsima_user_DllExport HandReplyParam& operator=(const HandReplyParam& x);

  /*!
   * @brief Move assignment.
   * @param x Reference to the object booster_interface::msg::HandReplyParam
   * that will be copied.
   */
  eProsima_user_DllExport HandReplyParam& operator=(
      HandReplyParam&& x) noexcept;

  /*!
   * @brief Comparison operator.
   * @param x booster_interface::msg::HandReplyParam object to compare.
   */
  eProsima_user_DllExport bool operator==(const HandReplyParam& x) const;

  /*!
   * @brief Comparison operator.
   * @param x booster_interface::msg::HandReplyParam object to compare.
   */
  eProsima_user_DllExport bool operator!=(const HandReplyParam& x) const;

  /*!
   * @brief This function sets a value in member angle
   * @param _angle New value for member angle
   */
  eProsima_user_DllExport void angle(int32_t _angle);

  /*!
   * @brief This function returns the value of member angle
   * @return Value of member angle
   */
  eProsima_user_DllExport int32_t angle() const;

  /*!
   * @brief This function returns a reference to member angle
   * @return Reference to member angle
   */
  eProsima_user_DllExport int32_t& angle();

  /*!
   * @brief This function sets a value in member force
   * @param _force New value for member force
   */
  eProsima_user_DllExport void force(int32_t _force);

  /*!
   * @brief This function returns the value of member force
   * @return Value of member force
   */
  eProsima_user_DllExport int32_t force() const;

  /*!
   * @brief This function returns a reference to member force
   * @return Reference to member force
   */
  eProsima_user_DllExport int32_t& force();

  /*!
   * @brief This function sets a value in member current
   * @param _current New value for member current
   */
  eProsima_user_DllExport void current(int32_t _current);

  /*!
   * @brief This function returns the value of member current
   * @return Value of member current
   */
  eProsima_user_DllExport int32_t current() const;

  /*!
   * @brief This function returns a reference to member current
   * @return Reference to member current
   */
  eProsima_user_DllExport int32_t& current();

  /*!
   * @brief This function sets a value in member error
   * @param _error New value for member error
   */
  eProsima_user_DllExport void error(int32_t _error);

  /*!
   * @brief This function returns the value of member error
   * @return Value of member error
   */
  eProsima_user_DllExport int32_t error() const;

  /*!
   * @brief This function returns a reference to member error
   * @return Reference to member error
   */
  eProsima_user_DllExport int32_t& error();

  /*!
   * @brief This function sets a value in member status
   * @param _status New value for member status
   */
  eProsima_user_DllExport void status(int32_t _status);

  /*!
   * @brief This function returns the value of member status
   * @return Value of member status
   */
  eProsima_user_DllExport int32_t status() const;

  /*!
   * @brief This function returns a reference to member status
   * @return Reference to member status
   */
  eProsima_user_DllExport int32_t& status();

  /*!
   * @brief This function sets a value in member temp
   * @param _temp New value for member temp
   */
  eProsima_user_DllExport void temp(int32_t _temp);

  /*!
   * @brief This function returns the value of member temp
   * @return Value of member temp
   */
  eProsima_user_DllExport int32_t temp() const;

  /*!
   * @brief This function returns a reference to member temp
   * @return Reference to member temp
   */
  eProsima_user_DllExport int32_t& temp();

  /*!
   * @brief This function sets a value in member seq
   * @param _seq New value for member seq
   */
  eProsima_user_DllExport void seq(int32_t _seq);

  /*!
   * @brief This function returns the value of member seq
   * @return Value of member seq
   */
  eProsima_user_DllExport int32_t seq() const;

  /*!
   * @brief This function returns a reference to member seq
   * @return Reference to member seq
   */
  eProsima_user_DllExport int32_t& seq();

 private:
  int32_t m_angle{0};
  int32_t m_force{0};
  int32_t m_current{0};
  int32_t m_error{0};
  int32_t m_status{0};
  int32_t m_temp{0};
  int32_t m_seq{0};

 public:
  typedef HandReplyParam type;

  eProsima_user_DllExport HandReplyParam();

  eProsima_user_DllExport ~HandReplyParam() override;

  eProsima_user_DllExport bool serialize(
      void* data,
      eprosima::fastrtps::rtps::SerializedPayload_t* payload) override {
    return serialize(data, payload,
                     eprosima::fastdds::dds::DEFAULT_DATA_REPRESENTATION);
  }

  eProsima_user_DllExport bool serialize(
      void* data, eprosima::fastrtps::rtps::SerializedPayload_t* payload,
      eprosima::fastdds::dds::DataRepresentationId_t data_representation)
      override;

  eProsima_user_DllExport bool deserialize(
      eprosima::fastrtps::rtps::SerializedPayload_t* payload,
      void* data) override;

  eProsima_user_DllExport std::function<uint32_t()> getSerializedSizeProvider(
      void* data) override {
    return getSerializedSizeProvider(
        data, eprosima::fastdds::dds::DEFAULT_DATA_REPRESENTATION);
  }

  eProsima_user_DllExport std::function<uint32_t()> getSerializedSizeProvider(
      void* data,
      eprosima::fastdds::dds::DataRepresentationId_t data_representation)
      override;

  eProsima_user_DllExport bool getKey(
      void* data, eprosima::fastrtps::rtps::InstanceHandle_t* ihandle,
      bool force_md5 = false) override;

  eProsima_user_DllExport void* createData() override;

  eProsima_user_DllExport void deleteData(void* data) override;

#ifdef TOPIC_DATA_TYPE_API_HAS_IS_BOUNDED
  eProsima_user_DllExport inline bool is_bounded() const override {
    return true;
  }

#endif  // TOPIC_DATA_TYPE_API_HAS_IS_BOUNDED

#ifdef TOPIC_DATA_TYPE_API_HAS_IS_PLAIN
  eProsima_user_DllExport inline bool is_plain() const override {
    return false;
  }

  eProsima_user_DllExport inline bool is_plain(
      eprosima::fastdds::dds::DataRepresentationId_t data_representation)
      const override {
    static_cast<void>(data_representation);
    return false;
  }

#endif  // TOPIC_DATA_TYPE_API_HAS_IS_PLAIN

#ifdef TOPIC_DATA_TYPE_API_HAS_CONSTRUCT_SAMPLE
  eProsima_user_DllExport inline bool construct_sample(
      void* memory) const override {
    static_cast<void>(memory);
    return false;
  }

#endif  // TOPIC_DATA_TYPE_API_HAS_CONSTRUCT_SAMPLE

  MD5 m_md5;
  unsigned char* m_keyBuffer;
};

}  // namespace msg

}  // namespace booster_interface

#endif  // _FAST_DDS_GENERATED_BOOSTER_INTERFACE_MSG_HANDREPLYPARAM_H_
